class Solution {
public:
    int maxSubarraySumCircular(vector<int>& nums) {
        int temp=nums[0],rt=nums[nums.size()-1],rts=0,lts=nums[0],max1=nums[0];
        int max2=nums[0];
        vector<int> lt(nums.size());
        lt[0]=nums[0];
        for(int i=1;i<nums.size();i++){
            temp=max(nums[i],temp+nums[i]);
            max1=max(temp,max1);
            lts+=nums[i];
            lt[i]=max(lt[i-1],lts);
        }
        for(int i=nums.size()-1;i>0;i--){
            rts+=nums[i];
            rt=max(rts+lt[i-1],rt);
            max2=max(rt,max2);
        }
        return max(max1,max2);
    }
};
